'''特殊形式的函数'''

'''6.7.1 递归函数'''
# 函数在定义时可以直接或间接地调用其他函数,若函数内部调用了自身,则这个函数被称为递归函数
# 递归函数的两个条件
# 1.递归公式:是求解原问题或者相似的子问题的结构
# 2.边界条件:是最小化的子问题,也是递归终止的条件
# 递归函数执行可分为以下2个阶段
# 1.递推:递归本次的执行都基于上一次的运算结果
# 2.回溯:遇到终止条件时,则沿着递推往回一级一级地把值返回来
# 递归函数的一般定义格式
'''
def 函数名([参数列表]):
    if 边界条件:
        return 结果
    else:
        return 递归公式
'''
# 递推实例:求阶乘
def func(n):
    if n == 1:
        return 1
    if n != 1:
        return n * func(n-1)
n = int(input('请输入一个正整数:'))
result = func(n)
print(f'{n}的阶乘为:{result}')

'''6.7.2 匿名函数'''
'''
Python中使用lambda关键字定义匿名函数.语法格式如下:
lambda 形式参数列表 : 表达式
匿名函数与普通函数的区别:
1.普通函数在定义时有名称,匿名函数没有名称
2.普通函数的函数体中包含多个语句,匿名函数的函数体只能是一个表达式
3.普通函数可以实现比较复杂的功能,而匿名函数可实现的功能比较简单
4.普通函数能被其他程序使用,而匿名函数不能被其他程序使用
定义好的匿名函数不能直接使用,最好使用一个变量保存它,以便后期可以随时使用
'''
# 定义匿名函数,并将它返回的函数对象赋值给变量
temp = lambda x,y : x*y
# 此时,变量temp可以作为匿名函数的临时名称来调用函数
x = float(input('输入长方形的长:'))
y = float(input('输入长方形的宽:'))
print(f'长方形面积为:{temp(x, y)}')
